package ar.uade.distribuidas.tpo.srv.delegado;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.List;
import java.util.Set;

import ar.uade.distribuidas.tpo.base.dominiodto.ClienteDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.CotizacionDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.EstadoItemPedido;
import ar.uade.distribuidas.tpo.base.dominiodto.ItemListaPrecioDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.ItemPedidoDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.ItemSolicitudDeCotizacionDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.ListaPrecioDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.OrdenDeCompraDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.OrdenDePedidoDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.ProveedorDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.RemitoCPEDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.RemitoDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.RodamientoDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.SolicitudDeCotizacionDTO;
import ar.uade.distribuidas.tpo.base.remoto.IGestion;

public class BD {

	private IGestion gestion;
	private static BD bd;
	
	private BD(){
		LookupService();
	}
	public static BD getInstance(){
		if(bd == null)
			bd = new BD();
		return bd;
	}
	
    private void LookupService() {
    	try {
    		String vinculo = "Gestion";
			gestion = (IGestion)Naming.lookup (vinculo);
			System.out.println(vinculo);
		} catch (Exception e) {
			javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
		} 
    }
    
    
    
    public void altaCliente(ClienteDTO cDTO){
    	try{
    		gestion.altaCliente(cDTO);
    	}catch (Exception e){
    		System.out.println("me fui por el BD");
    		e.printStackTrace();
    		
    	}
    }
    
    public void altaCliente(Long cuil, String nombre){
    	try{
    		ClienteDTO cDTO = new ClienteDTO(cuil, nombre);
    		gestion.altaCliente(cDTO);
    	}catch (Exception e){
    		System.out.println("me fui por el BD");
    		e.printStackTrace();
    		
    	}
    }
    
   
    
    public void modificarCliente(ClienteDTO cDTO){
    	try{
    		gestion.modificarCliente(cDTO);
    	}catch (Exception e){
    		System.out.println("me fui por el BD");
    		e.printStackTrace();
    	}
    }
    
    public void bajaCliente(ClienteDTO cDTO){
    	try{
    		gestion.bajaCliente(cDTO);
    	}catch(Exception e){
    		System.out.println("me fui por BD");
    		e.printStackTrace();
    	}
    }
    
    public ClienteDTO getCliente(Long cuil){
    	ClienteDTO cli = null;
    	try{
    		cli = gestion.getCliente(cuil);
    	}catch(Exception e){
    		System.out.println("me fui por BD");
    		e.printStackTrace();
    	}
    	return cli;
    }
    
    public List<ClienteDTO> getAllClientes(Long cuil){
    	List<ClienteDTO> lista = null;
    	
    	try{
    		lista = gestion.getClientes();
    	}catch(Exception e){
    		System.out.println("me fui por BD");
    		e.printStackTrace();
    	}
    	
		return lista;
    }
    
    public void altaListaPrecio(ListaPrecioDTO cDTO){
    	try{
    		gestion.crearListaPrecio(cDTO);
    	}catch (Exception e){
    		System.out.println("me fui por el BD");
    		e.printStackTrace();
    		
    	}
    }
    
   
    
    public void modificarListaPrecio(ProveedorDTO cDTO){
    	try{
    		gestion.actualizarListaPrecio(cDTO);
    	}catch (Exception e){
    		System.out.println("me fui por el BD");
    		e.printStackTrace();
    	}
    }
    
    
    
    
    public ItemListaPrecioDTO getMejorPrecio(RodamientoDTO rod, int cant){
    	ItemListaPrecioDTO item = null;
    	
    	try{
    		item = gestion.getMejorPrecio(rod, cant);
    	}catch(Exception e){
    		System.out.println("me fui por BD");
    		e.printStackTrace();
    	}
    	
		return item;
    }
    

	public void altaProveedor(ProveedorDTO pDTO) {
		try{
			gestion.altaProveedor(pDTO);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public void modificarProveedor(ProveedorDTO pDTO){
		try{
			gestion.modificarProveedor(pDTO);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public void bajaProveedor(Long cuil){
		try{
			gestion.bajaProveedor(cuil);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public ProveedorDTO getProveedor(Long cuil){
		ProveedorDTO prov = null;
		try{
			prov = gestion.getProveedor(cuil);
		}catch(Exception e){
			e.printStackTrace();
		}
		 return prov;
	}
	
	public List<OrdenDeCompraDTO> comprarMercaderia(){
		List<OrdenDeCompraDTO> ordenesComp = null;
		try{
			ordenesComp = gestion.comprarRodamientos();
		}catch(Exception e){
			e.printStackTrace();
		}
		 return ordenesComp;
	}
	
	 public boolean existeRodamiento(RodamientoDTO cDTO) {
	    	try{
	    		return gestion.existeRodamiento(cDTO);
	    	}catch (Exception e){
	    		System.out.println("me fui por el BD");
	    		e.printStackTrace();
	    		
	    	}
	    	return false;
	    }
	    
	    public RodamientoDTO getRodamiento(RodamientoDTO cDTO) {
	    	try{
	    		return gestion.getRodamiento(cDTO);
	    	}catch (Exception e){
	    		System.out.println("me fui por el BD");
	    		e.printStackTrace();
	    		
	    	}
	    	return null;
	    }
	    
	    public void altaRodamiento(RodamientoDTO rDTO) {
	    	try{
	    		gestion.saveRodamiento(rDTO);
	    	}catch (Exception e){
	    		System.out.println("me fui por el BD");
	    		e.printStackTrace();
	    	}
	    }
	    
	    public void alta(SolicitudDeCotizacionDTO solDTO) {
			try {
				gestion.altaSolicitudDeCotizacion(solDTO);
			} catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
		}

		public SolicitudDeCotizacionDTO get(Long long1) {
			try {
				return gestion.getById(long1);
			} catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
			return null;
		}
		
		
		public void comprarRodamientos() {
			try {
				gestion.comprarRodamientos();
			} catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
	
		}
		
		public List<RemitoDTO> recibirMercaderia(Set<RemitoCPEDTO> lop) {
			try {
				 gestion.recibirMercaderia(lop);
				 return gestion.procesarItemsPedidoComprados();
			} catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
	
			return null;
		}
		
		public OrdenDePedidoDTO getOrdenDePedido(Long long1) {
			try {
				return gestion.getOrdenDePedido(long1);
			} catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
			return null;
		}
		
		public OrdenDeCompraDTO getOrdenCompra(int ordenCompraNumero) {
			try {
				 return gestion.getOrdenCompra(ordenCompraNumero);
			} catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
				return null;
		}
		public void altaOC(OrdenDeCompraDTO oc) {
			try{
				gestion.altaOC(oc);
			}catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}

		}
		
		public CotizacionDTO getCotizacion (Long idCot){
			
			try {
				 return gestion.getCotizacion(idCot);
			} catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
				return null;
			
		}
		public ItemSolicitudDeCotizacionDTO getItemSolicitudDeCotizacion(Long long1) {
			try {
				 return gestion.getItemSolicitudDeCotizacion(long1);
			} catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
				return null;
		}
		
		public void cambiarEstadoItem(Long id, EstadoItemPedido estadoNuevo){
			try{
				gestion.cambiarEstadoItem(id, estadoNuevo);
			}catch (Exception e) {
				System.out.println("me fui por el BD");
				e.printStackTrace();
			}
		}
		
		
		public List<ItemPedidoDTO> getItemsPedidoByEstado(EstadoItemPedido estado) throws RemoteException{
			return gestion.getItemsPedidoByEstado(estado);
		}
		
		
		public RemitoDTO getRemitoByNumero(int numero){
			try {
				return gestion.getRemitoByNumero(numero);
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return null;
		}
	
		
			
			
		
}
